package com.kc.business.service.impl;

import cn.hutool.core.util.ArrayUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.kc.business.domain.BizGoods;
import com.kc.business.domain.BizGoodsSkuCategory;
import com.kc.business.domain.KcGoodsRecommendRelation;
import com.kc.business.domain.dto.BizGoodsRecommendListDTO;
import com.kc.business.domain.goodsSku.BizGoodsSkuSpecs;
import com.kc.business.domain.goodsSku.BizGoodsSkuSpecsInfo;
import com.kc.business.mapper.*;
import com.kc.business.service.IBizGoodsService;
import com.kc.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 商品管理
 */
@Service
@Slf4j
public class BizGoodsServiceImpl implements IBizGoodsService {
    @Autowired
    private BizGoodsMapper bizGoodsMapper;
    @Resource
    private KcGoodsRecommendRelationMapper kcGoodsRecommendRelationMapper;
    @Resource
    private BizGoodsSkuSpecsMapper bizGoodsSkuSpecsMapper;
    @Resource
    private BizGoodsSkuSpecsInfoMapper bizGoodsSkuSpecsInfoMapper;
    @Resource
    private BizGoodsSkuMapper bizGoodsSkuMapper;
    @Resource
    private BizGoodsSkuCategoryMapper goodsSkuCategoryMapper;
    /**
     * 商品列表
     * @param bizGoods
     * @return
     */
    @Override
    public List<BizGoods> getList(BizGoods bizGoods) {
        List<BizGoods> bizGoodsList = bizGoodsMapper.getGoodsList(bizGoods);
        bizGoodsList.forEach(goods->{
            KcGoodsRecommendRelation goodsRecommendRelation = new KcGoodsRecommendRelation();
            goodsRecommendRelation.setGoodsId(goods.getId());
            List<KcGoodsRecommendRelation> recommendRelationList = kcGoodsRecommendRelationMapper.select(goodsRecommendRelation);
            List<String> list = new ArrayList<>();
            recommendRelationList.forEach(recommendRelation->{
                list.add(recommendRelation.getTypeId());
            });
            List<BizGoodsSkuSpecs> skuBigSpecs = new ArrayList<>();
            //if(!goods.getSkuCategoryId().equals(0)){
            if(StringUtils.isNotEmpty(goods.getSpecs()) && !goods.getSpecs().equals("null") && !goods.getSpecs().equals("[]")){
                goods.setSpaceType(1);
                List<BizGoodsSkuSpecsInfo> skuSpecs = JSONObject.parseObject(goods.getSpecs(),new TypeReference<List<BizGoodsSkuSpecsInfo>>(){});
                if(!skuSpecs.isEmpty()) {
                    goods.setSkuCategoryId(skuSpecs.get(0).getSpecsId());
                }
                goods.setSkuSpecs(skuSpecs);
            }

//            goods.setSkuBigSpecs(skuBigSpecs);
//            goods.setSkuConfig(goods.getSkuBigSpecs());
            goods.setRecommendType(list.toArray(new String[list.size()]));
        });
        return bizGoodsList;
    }

    /**
     * 获取商品详情
     * @param bizGoods
     * @return
     */
    @Override
    public BizGoods getInfo(BizGoods bizGoods) {
        return bizGoodsMapper.selectByPrimaryKey(bizGoods);
    }

    /**
     * 添加商品
     * @param bizGoods
     * @return
     */
    @Override
    public Integer add(BizGoods bizGoods) {
        if(bizGoods.getScenicId() == null){
            bizGoods.setScenicId(0);
        }
        if(bizGoods.getMarketBusinessId() == null){
            bizGoods.setMarketBusinessId(0);
        }
        if(bizGoods.getMerchid() == null){
            bizGoods.setMerchid(0);
        }
        if(bizGoods.getStatus() == null){
            bizGoods.setStatus(0);
        }
        if(bizGoods.getSales() == null){
            bizGoods.setSales(0);
        }
        if(bizGoods.getSalesreal() == null){
            bizGoods.setSalesreal(0);
        }
        //插入数据
        if(bizGoods.getRecommendType() != null) {
            Integer len = bizGoods.getRecommendType().length;
            if (len > 0) {
                for (String i : bizGoods.getRecommendType()) {
                    kcGoodsRecommendRelationMapper.insert(new KcGoodsRecommendRelation(bizGoods.getId(), i));
                }
            }
        }

        String specsString = JSONObject.toJSONString(bizGoods.getSkuSpecs());
        bizGoods.setSpecs(specsString);
        //String bigSpecsString = JSONObject.toJSONString(bizGoods.getSkuBigSpecs());
        //bizGoods.setBigSpecs(bigSpecsString);
        if(bizGoods.getSkuSpecs() != null) {
            //有规格
            bizGoods.setSpecs(JSONObject.toJSONString(bizGoods.getSkuSpecs()));
        }
        bizGoodsMapper.insert(bizGoods);
        if(!bizGoods.getSkuSpecs().isEmpty()){
            //有规格
            List<BizGoodsSkuSpecsInfo> skuSpecs = bizGoods.getSkuSpecs();
            bizGoods.setMarketprice(new BigDecimal(skuSpecs.get(0).getPrice().toString()));
            bizGoods.setCostPrice(new BigDecimal(skuSpecs.get(0).getCostPrice().toString()));
            bizGoods.setSpecs(JSONObject.toJSONString(bizGoods.getSkuSpecs()));
            setSpace(bizGoods);
        }
        return bizGoods.getId();
    }

    /**
     * 处理商品规格
     * @param bizGoods
     */
    public void setSpace(BizGoods bizGoods){
        BizGoodsSkuCategory bizGoodsSkuCategory = new BizGoodsSkuCategory();
        bizGoodsSkuCategory.setId(bizGoods.getSkuCategoryId());
        bizGoodsSkuCategory = goodsSkuCategoryMapper.selectOne(bizGoodsSkuCategory);
        Integer goodsId = bizGoods.getId();
        //todo 1所有sku数据标为禁用状态  2 判断数据是否存在，存在更新数据并改变状态
        bizGoodsSkuMapper.deleteByGoodsId(goodsId);
        for(BizGoodsSkuSpecsInfo bizGoodsSku:bizGoods.getSkuSpecs()){
            bizGoodsSku.setGoodsId(goodsId);
            bizGoodsSku.setStatus(1);
            bizGoodsSku.setSku("");
            if(bizGoodsSkuCategory!=null) {
                bizGoodsSku.setSpecsName(bizGoodsSkuCategory.getName());
            }
            bizGoodsSku.setSpecsId(bizGoods.getSkuCategoryId());
            BizGoodsSkuSpecsInfo bizGoodsSkuSpecsInfoSearch = new BizGoodsSkuSpecsInfo();
            bizGoodsSkuSpecsInfoSearch.setGoodsId(goodsId);
            bizGoodsSkuSpecsInfoSearch.setSkuName(bizGoodsSku.getSkuName());
            bizGoodsSkuSpecsInfoSearch.setSpecsName(bizGoodsSku.getSpecsName());
            //执行查询操作
            bizGoodsSkuSpecsInfoSearch = bizGoodsSkuSpecsInfoMapper.selectOne(bizGoodsSkuSpecsInfoSearch);
            if(bizGoodsSkuSpecsInfoSearch == null){
                //不存在新增
                bizGoodsSkuSpecsInfoMapper.insert(bizGoodsSku);
            }else{
                //存在，编辑
                bizGoodsSku.setId(bizGoodsSkuSpecsInfoSearch.getId());
                bizGoodsSkuSpecsInfoMapper.updateByPrimaryKey(bizGoodsSku);
            }

        }

    }
    public void setSpace11(BizGoods bizGoods){

        Integer goodsId = bizGoods.getId();
        bizGoodsSkuSpecsMapper.deleteByGoodsId(goodsId);
        bizGoodsSkuSpecsInfoMapper.deleteByGoodsId(goodsId);
        for(BizGoodsSkuSpecsInfo goodsSkuSpecsInfo : bizGoods.getSkuSpecs()){
            //先处理 BizGoodsSkuSpecs
            //BizGoodsSkuSpecs(String name, Integer status, Integer goodsId)
            String[] sku = StringUtils.split(goodsSkuSpecsInfo.getSku(),";");
            //先去库里查，如果有，变更，如果没有，新增
            BizGoodsSkuSpecs bizGoodsSkuSpecsSearch = new BizGoodsSkuSpecs();
            bizGoodsSkuSpecsSearch.setName(sku[0]);
            bizGoodsSkuSpecsSearch.setGoodsId(goodsId);
            List<BizGoodsSkuSpecs> bizGoodsSkuSpecsList = bizGoodsSkuSpecsMapper.select(bizGoodsSkuSpecsSearch);
            BizGoodsSkuSpecs bizGoodsSkuSpecs = new BizGoodsSkuSpecs(sku[0], 1, goodsId);
            Integer specsId = 0;
            bizGoodsSkuSpecs.setStatus(1);
            if(bizGoodsSkuSpecsList.size() != 0){
                //修改
                bizGoodsSkuSpecs.setId(bizGoodsSkuSpecsList.get(0).getId());
                bizGoodsSkuSpecsMapper.updateByPrimaryKey(bizGoodsSkuSpecs);
            }else {
                //新增
                bizGoodsSkuSpecsMapper.insert(bizGoodsSkuSpecs);
            }
            specsId = bizGoodsSkuSpecs.getId();
            //商品sku处理
            BizGoodsSkuSpecsInfo bizGoodsSkuSpecsInfoSearch = new BizGoodsSkuSpecsInfo();
            bizGoodsSkuSpecsInfoSearch.setGoodsId(goodsId);
            bizGoodsSkuSpecsInfoSearch.setSpecsId(specsId);
            if(sku.length > 1) {
                bizGoodsSkuSpecsInfoSearch.setSkuName(sku[1]);
            }else{
                bizGoodsSkuSpecsInfoSearch.setSkuName(sku[0]);
            }
            List<BizGoodsSkuSpecsInfo> bizGoodsSkuSpecsInfoList = bizGoodsSkuSpecsInfoMapper.select(bizGoodsSkuSpecsInfoSearch);
            //查询数据是否存在
            String skuName = "";
            if(sku.length > 1) {
                skuName = sku[1];
            }else{
                skuName = sku[0];
            }
            BizGoodsSkuSpecsInfo bizGoodsSkuSpecsInfo = new BizGoodsSkuSpecsInfo(skuName,goodsSkuSpecsInfo.getActivityPrice(),goodsSkuSpecsInfo.getPrice(),goodsSkuSpecsInfo.getStock(),
                    goodsSkuSpecsInfo.getImage(),goodsId,specsId);
            bizGoodsSkuSpecsInfo.setSku("");
            bizGoodsSkuSpecsInfo.setStatus(1);
            bizGoodsSkuSpecsInfo.setSpecsName(sku[0]);
            //状态标记为删除

            if(bizGoodsSkuSpecsInfoList.size() == 0){
                bizGoodsSkuSpecsInfoMapper.insert(bizGoodsSkuSpecsInfo);
            }else{
                bizGoodsSkuSpecsInfo.setId(bizGoodsSkuSpecsInfoList.get(0).getId());
                bizGoodsSkuSpecsInfoMapper.updateByPrimaryKey(bizGoodsSkuSpecsInfo);
            }
        }
    }

    @Override
    public Integer edit(BizGoods bizGoods) {
        log.info("商品编辑参数{}",bizGoods);
        //删除历史的
        KcGoodsRecommendRelation kcGoodsRecommendRelation = new KcGoodsRecommendRelation();
        kcGoodsRecommendRelation.setGoodsId(bizGoods.getId());
        kcGoodsRecommendRelationMapper.delete(kcGoodsRecommendRelation);
        //插入数据
        Integer len = bizGoods.getRecommendType() == null ? 0:bizGoods.getRecommendType().length;
        if(len > 0) {
            for (String i : bizGoods.getRecommendType()){
                kcGoodsRecommendRelationMapper.insert(new KcGoodsRecommendRelation(bizGoods.getId(),i));
            }
        }
        String specsString = JSONObject.toJSONString(bizGoods.getSkuSpecs());
        bizGoods.setSpecs(specsString);
        //if(!bizGoods.getSkuSpecs().isEmpty()) {
        if(bizGoods.getSkuSpecs() != null && !bizGoods.getSkuSpecs().equals("") && !bizGoods.getSkuSpecs().isEmpty()) {
            //有规格
            List<BizGoodsSkuSpecsInfo> skuSpecs = bizGoods.getSkuSpecs();
            bizGoods.setMarketprice(new BigDecimal(skuSpecs.get(0).getPrice().toString()));
            bizGoods.setCostPrice(new BigDecimal(skuSpecs.get(0).getCostPrice().toString()));
            bizGoods.setSpecs(JSONObject.toJSONString(bizGoods.getSkuSpecs()));
            setSpace(bizGoods);
        }
        return bizGoodsMapper.updateByPrimaryKeySelective(bizGoods);
    }

    /**
     * 删除数据
     * @param bizGoods
     * @return
     */
    @Override
    public Integer delete(BizGoods bizGoods) {
        return bizGoodsMapper.updateByPrimaryKeySelective(bizGoods);
    }

    @Override
    public List<BizGoodsRecommendListDTO> getGoodsRecommendList(String[] ids) {
        return bizGoodsMapper.getGoodsRecommendList(ids);
    }

    @Override
    public Integer getPlatformGoodsNum(Integer platformId, Integer entryType) {
        Integer num = bizGoodsMapper.getPlatformGoodsNum(platformId,entryType);
        return num;
    }

    @Override
    public List<Map<String, Object>> selfSupportList(String keyWords) {
        return bizGoodsMapper.getSelfSupportGoods(keyWords);
    }
}
